package persistencia;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import negocio.Fiador;
import negocio.ImobiliariaException;

public class ListaFiadorDAO extends BaseDAO{
	
	private PreparedStatement stIncluir;
    private PreparedStatement stConsultaNome;
    private PreparedStatement stConsultaDataNasc;
    private PreparedStatement stConsultaCpf;
    private PreparedStatement stListaNome;
    private PreparedStatement stAlterar;

    public ListaFiadorDAO() throws ImobiliariaException {
        super();
        Connection conect = getConexao();
        try {
            stIncluir = conect.prepareStatement("INSERT INTO Fiador (nome, datanasc, endereco, cpffiador, telefone, rg, email, estadocivil, renda) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ? )");
            stConsultaNome = conect.prepareStatement("SELECT * FROM Fiador WHERE nome LIKE %?%");
            stConsultaDataNasc = conect.prepareStatement("SELECT * FROM Fiador WHERE datanasc = ?");
            stConsultaCpf = conect.prepareStatement("SELECT * FROM Fiador WHERE cpffiador = ?");
            stListaNome = conect.prepareStatement("SELECT * FROM Fiador ORDER BY nome");
            stAlterar = conect.prepareStatement("UPDATE Fiador SET nome=?, datanasc=?, endereco=?, cpffiador=?, telefone=?, rg=?, email=?, estadocivil=?,renda=? WHERE cpffiador = ?");
        } catch(SQLException e) {
            throw new ImobiliariaException("Nao foi possivel criar as consultas dos fiadores: " + e.getMessage());
        }
    }

public void incluir(Fiador f) throws ImobiliariaException {
	try {
         stIncluir.setString(1, f.getNome());
         stIncluir.setString(2, f.getDataNasc());
         stIncluir.setString(3, f.getEndereco());
         stIncluir.setString(4, f.getCpf());
         stIncluir.setString(5, f.getTelefone());
         stIncluir.setString(6, f.getRg());
         stIncluir.setString(7, f.getEmail());
         stIncluir.setString(8, f.getEstadoCivil());
         stIncluir.setDouble(9, f.getRenda());
         stIncluir.executeUpdate();
           } catch(SQLException e) {
               throw new ImobiliariaException("Erro ao incluir novo fiador: " + e.getMessage());
           }
           
          System.out.println(f);
} 

public Fiador[] consultaPorNome(String nome) throws ImobiliariaException {
			
		Vector v = new Vector();
	try {
         stConsultaNome.setString(1, nome);
         ResultSet rs = stConsultaNome.executeQuery();
         	while(rs.next()) {
                  Fiador f = new Fiador();
                  f.setNome(rs.getString("nome"));
                  f.setDataNasc(rs.getString("datanasc"));
                  f.setEndereco(rs.getString("endereco"));
                  f.setCpf(rs.getString("cpffiador"));
                  f.setTelefone(rs.getString("telefone"));
                  f.setRg(rs.getString("rg"));
                  f.setEmail(rs.getString("email"));
                  f.setEstadoCivil(rs.getString("estadocivil"));
                  f.setRenda(rs.getFloat("renda"));
                  v.add(f);
                 }
	} catch(SQLException e) {
		throw new ImobiliariaException("Erro ao executar consulta de fiador por nome: " + e.getMessage());
	}

	return (Fiador[]) v.toArray(new Fiador[0]);
}


	public Fiador consultaDataNasc(String dataNasc) throws ImobiliariaException{
			
		Vector v = new Vector();

	try {
         stConsultaDataNasc.setString(1, dataNasc);
         ResultSet rs = stConsultaDataNasc.executeQuery();
         	while(rs.next()) {
                  Fiador f = new Fiador();
                  f.setNome(rs.getString("nome"));
                  f.setDataNasc(rs.getString("datanasc"));
                  f.setEndereco(rs.getString("endereco"));
                  f.setCpf(rs.getString("cpffiador"));
                  f.setTelefone(rs.getString("telefone"));
                  f.setRg(rs.getString("rg"));
                  f.setEmail(rs.getString("email"));
                  f.setEstadoCivil(rs.getString("estadocivil"));
                  f.setRenda(rs.getFloat("renda"));
                  return f;
                    }
	} catch(SQLException e) {
		throw new ImobiliariaException("Erro ao executar consulta de fiador por data de nascimento: " + e.getMessage());
	}

	return null;
} 


public Fiador consultaPorCpf(String nome) throws ImobiliariaException {
	try {
         stConsultaCpf.setString(1, nome);
         ResultSet rs = stConsultaCpf.executeQuery();
         	while(rs.next()) {
                  Fiador f = new Fiador();
                  f.setNome(rs.getString("nome"));
                  f.setDataNasc(rs.getString("datanasc"));
                  f.setEndereco(rs.getString("endereco"));
                  f.setCpf(rs.getString("cpffiador"));
                  f.setTelefone(rs.getString("telefone"));
                  f.setRg(rs.getString("rg"));
                  f.setEmail(rs.getString("email"));
                  f.setEstadoCivil(rs.getString("estadocivil"));
                  f.setRenda(rs.getFloat("renda"));
                  return f;
                }
	} catch(SQLException e) {
		throw new ImobiliariaException("Erro ao executar consulta de fiador por CPF: " + e.getMessage());
	}

	return null;
}


public Fiador[] listaNome() throws ImobiliariaException {
	Vector<Fiador> result = new Vector<Fiador>();
	try {
         ResultSet rs = stListaNome.executeQuery();
         	while(rs.next()) {
                  Fiador f = new Fiador();
                  f.setNome(rs.getString("nome"));
                  f.setDataNasc(rs.getString("datanasc"));
                  f.setEndereco(rs.getString("endereco"));
                  f.setCpf(rs.getString("cpffiador"));
                  f.setTelefone(rs.getString("telefone"));
                  f.setRg(rs.getString("rg"));
                  f.setEmail(rs.getString("email"));
                  f.setEstadoCivil(rs.getString("estadocivil"));
                  f.setRenda(rs.getFloat("renda"));
                  result.add(f);
                }
	} catch(SQLException e) {
		throw new ImobiliariaException("Erro ao consultar fiador cadastrados: " + e.getMessage());
	}
	
	return result.toArray(new Fiador[0]);
}

public void alterar(Fiador f) throws ImobiliariaException {
	try {
		stAlterar.setString(1, f.getNome());
		stAlterar.setString(2, f.getDataNasc());
		stAlterar.setString(3, f.getEndereco());
		stAlterar.setString(4, f.getCpf());
		stAlterar.setString(5, f.getTelefone());
		stAlterar.setString(6, f.getRg());
		stAlterar.setString(7, f.getEmail());
		stAlterar.setString(8, f.getEstadoCivil());
		stAlterar.setFloat(9, f.getRenda());
        stAlterar.executeUpdate();
        
	} catch(SQLException e) {
		throw new ImobiliariaException("Erro ao alterar dados do fiador: " + e.getMessage());
	} 		
}




}
